wayland: Don't error out on G_IO_HUP until we've read G_IO_IN data
authorKristian Høgsberg <krh@bitplanet.net>
Sat, 30 Mar 2013 18:17:07 +0000 (14:17 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 30 Mar 2013 18:20:00 +0000 (14:20 -0400)
We can get G_IO_HUP and G_IO_IN at the same time, if the compositor writes
data to us and then closes our connection.  Make sure that we dispatch events
always if we have G_IO_IN and then error out if we get G_IO_HUP after that.

gdk/wayland/gdkeventsource.c

index 93f68dc3b67b145bfd0b424a12ecc913ab386156..cb335bd2c1029aa18378841f7813ea458263e5a0 100644 (file)
@@ -57,9 +57,6 @@ gdk_event_source_check(GSource *base)
 {
   GdkWaylandEventSource *source = (GdkWaylandEventSource *) base;
 
-  if (source->pfd.revents & (G_IO_ERR | G_IO_HUP))
-    g_error ("Lost connection to wayland compositor");
-
   if (source->display->event_pause_count > 0)
     return FALSE;
 
@@ -153,9 +150,12 @@ _gdk_wayland_display_queue_events (GdkDisplay *display)
 
   display_wayland = GDK_WAYLAND_DISPLAY (display);
   source = (GdkWaylandEventSource *) display_wayland->event_source;
-  if (source->pfd.revents)
+  if (source->pfd.revents & G_IO_IN)
     {
        wl_display_dispatch(display_wayland->wl_display);
        source->pfd.revents = 0;
     }
+
+  if (source->pfd.revents & (G_IO_ERR | G_IO_HUP))
+    g_error ("Lost connection to wayland compositor");
 }